package com.atguigu.tingshu.search.config;

import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;

/**
 * @author atguigu-mqx
 * @ClassName ThreadPoolExecutorConfig
 * @description: TODO
 * @date 2024年12月31日
 * @version: 1.0
 */
@Component
public class ThreadPoolExecutorConfig {

    @Bean
    public ThreadPoolExecutor threadPoolExecutor(){
        //  需要自定义线程池；工具类创建的线程池: 阻塞队列或最大线程个数是Integer.MAX_VALUE;
        //  获取当前服务器的CPU核数
        int corePoolSize = Runtime.getRuntime().availableProcessors();
        return new ThreadPoolExecutor(
                corePoolSize, // 核心线程个数 IO:2N CPU:N+1; N:CPU核数
                16, //  最大线程个数
                60, //  空闲线程存活时间
                java.util.concurrent.TimeUnit.SECONDS, //  存活时间单位
                new java.util.concurrent.ArrayBlockingQueue<>(1000), // 阻塞队列
                Executors.defaultThreadFactory(), // 线程工厂
                new java.util.concurrent.ThreadPoolExecutor.AbortPolicy() // 拒绝策略
        );
    }
}
